package com.itheima.practice;
//编写方法，拷贝文件夹

import java.io.*;

public class Test03 {
    public static void main(String[] args) throws IOException {
        // 创建源文件夹目录对象和目标传入文件夹目录对象
        File file1 = new File("C:\\Users\\峰大帝\\Desktop\\新建文件夹");
        //File file2 = new File("D:\\新建文件夹");
        File file2 = new File("D:\\");
        // 调用拷贝文件夹方法，传入参数
        copyDir(file1, file2);
    }

    public static void copyDir(File file1, File file2) throws IOException {
        // 判断源文件夹对象是否存在 是否是一个文件夹
        if (file1.exists() && file1.isDirectory()) {
            String name1 = file1.getName();
            // 拼接新的文件夹名
            File destFile = new File(file2, name1);
            // 在目标目录下创建文件夹
            //file2.mkdirs();
            destFile.mkdirs();
            // 展示源文件夹下的文件
            File[] files = file1.listFiles();
            // 判断数组files数组是否为空
            if (files.length != 0) {
                // 遍历files数组
                for (File f : files) {
                    // 判断f是否是文件
                    if (f.isFile()) {
                        // 如果是文件，直接进行拷贝
                        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
                        // 获取文件名
                        String name = f.getName();
                        // 拼接要拷贝的文件的路径
                        File file3 = new File(file2, name);
                        //创建缓冲输出流对象
                        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file3));
                        int len;
                        byte[] data = new byte[1024];
                        while ((len = bis.read(data)) != -1) {
                            bos.write(data, 0, len);
                        }
                        bis.close();
                        bos.close();
                        // 如果f是文件夹
                    } else if (f.isDirectory()) {

                        /*// 获取f的文件名
                        String name = f.getName();
                        // 拼接新的文件夹名
                        File file3 = new File(file2, name);*/

                        // 传入新的参数，递归调用copyDir()方法
                        copyDir(f, destFile);
                    }
                }
            }
        }

    }
}
